/*******************************************************************************
* Copyright (c) 2004, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.intro;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.registry.RegistryReader;
/**
* Registry for introduction elements.
*
* @since 1.2
*/
public class IntroRegistry implements IIntroRegistry {
private static final String TAG_INTRO = "intro";//$NON-NLS-1$
// RAP [bm]: no product support - replaced with branding
// private static final String TAG_INTROPRODUCTBINDING = "introProductBinding";//$NON-NLS-1$
private static final String TAG_INTROBRANDINGBINDING = "introBrandingBinding";//$NON-NLS-1$
private static final String ATT_INTROID = "introId"; //$NON-NLS-1$
// RAP [bm]: no product support - replaced with branding
// private static final String ATT_PRODUCTID = "productId"; //$NON-NLS-1$
private static final String ATT_BRANDINGID = "brandingId"; //$NON-NLS-1$
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntroCount()
*/
public int getIntroCount() {
return getIntros().length;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntros()
*/
public IIntroDescriptor[] getIntros() {
// RAP [bm]: replaced namespace
// IExtensionPoint point = Platform.getExtensionRegistry()
// .getExtensionPoint(PlatformUI.PLUGIN_ID,
// IWorkbenchRegistryConstants.PL_INTRO);
IExtensionPoint point = Platform.getExtensionRegistry()
.getExtensionPoint(PlatformUI.PLUGIN_EXTENSION_NAME_SPACE,
IWorkbenchRegistryConstants.PL_INTRO);
// RAPEND: [bm]
if (point == null) {
return new IIntroDescriptor[0];
}
IExtension[] extensions = point.getExtensions();
extensions = RegistryReader.orderExtensions(extensions);
ArrayList list = new ArrayList(extensions.length);
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] elements = extensions[i]
.getConfigurationElements();
for (int j = 0; j < elements.length; j++) {
if (elements[j].getName().equals(TAG_INTRO)) {
try {
IIntroDescriptor descriptor = new IntroDescriptor(
elements[j]);
list.add(descriptor);
} catch (CoreException e) {
// log an error since its not safe to open a dialog here
WorkbenchPlugin
.log(
IntroMessages.get().Intro_could_not_create_descriptor, e.getStatus());
}
}
}
}
return (IIntroDescriptor[]) list.toArray(new IIntroDescriptor[list
.size()]);
}
// RAP [bm]: no product support - replaced with branding
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntroForProduct(java.lang.String)
// */
// public IIntroDescriptor getIntroForProduct(String targetProductId) {
// // RAP [bm]:
//// IExtensionPoint point = Platform.getExtensionRegistry()
//// .getExtensionPoint(PlatformUI.PLUGIN_ID,
//// IWorkbenchRegistryConstants.PL_INTRO);
// IExtensionPoint point = Platform.getExtensionRegistry()
// .getExtensionPoint(PlatformUI.PLUGIN_EXTENSION_NAME_SPACE,
// IWorkbenchRegistryConstants.PL_INTRO);
// // RAPEND: [bm]
// if (point == null) {
// return null;
// }
//
// IExtension[] extensions = point.getExtensions();
// extensions = RegistryReader.orderExtensions(extensions);
//
// String targetIntroId = getIntroForProduct(targetProductId, extensions);
// if (targetIntroId == null) {
// return null;
// }
//
// IIntroDescriptor descriptor = null;
//
// IIntroDescriptor[] intros = getIntros();
// for (int i = 0; i < intros.length; i++) {
// if (intros[i].getId().equals(targetIntroId)) {
// descriptor = intros[i];
// break;
// }
// }
//
// return descriptor;
// }
// RAP [bm] same as getIntroForProduct() but with a branding
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntroForProduct(java.lang.String)
*/
public IIntroDescriptor getIntroForBranding(String targetBrandingId) {
// RAP [bm]: replaced namespace
// IExtensionPoint point = Platform.getExtensionRegistry()
// .getExtensionPoint(PlatformUI.PLUGIN_ID,
// IWorkbenchRegistryConstants.PL_INTRO);
IExtensionPoint point = Platform.getExtensionRegistry()
.getExtensionPoint(PlatformUI.PLUGIN_EXTENSION_NAME_SPACE,
IWorkbenchRegistryConstants.PL_INTRO);
// RAPEND: [bm]
if (point == null) {
return null;
}
IExtension[] extensions = point.getExtensions();
extensions = RegistryReader.orderExtensions(extensions);
String targetIntroId = getIntroForBranding(targetBrandingId, extensions);
if (targetIntroId == null) {
return null;
}
IIntroDescriptor descriptor = null;
IIntroDescriptor[] intros = getIntros();
for (int i = 0; i < intros.length; i++) {
if (intros[i].getId().equals(targetIntroId)) {
descriptor = intros[i];
break;
}
}
return descriptor;
}
// RAP [bm]: no product support - using branding instead
// /**
// * @param targetProductId
// * @param extensions
// * @return
// */
// private String getIntroForProduct(String targetProductId,
// IExtension[] extensions) {
// for (int i = 0; i < extensions.length; i++) {
// IConfigurationElement[] elements = extensions[i]
// .getConfigurationElements();
// for (int j = 0; j < elements.length; j++) {
// if (elements[j].getName().equals(TAG_INTROPRODUCTBINDING)) {
// String introId = elements[j].getAttribute(ATT_INTROID);
// String productId = elements[j].getAttribute(ATT_PRODUCTID);
//
// if (introId == null || productId == null) {
// IStatus status = new Status(
// IStatus.ERROR,
// elements[j].getDeclaringExtension()
// .getNamespace(),
// IStatus.ERROR,
// "introId and productId must be defined.", new IllegalArgumentException()); //$NON-NLS-1$
// WorkbenchPlugin.log("Invalid intro binding", status); //$NON-NLS-1$
// continue;
// }
//
// if (targetProductId.equals(productId)) {
// return introId;
// }
// }
// }
// }
// return null;
// }
/**
* @param targetBrandingId
* @param extensions
* @return
*/
private String getIntroForBranding(String targetBrandingId,
IExtension[] extensions) {
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] elements = extensions[i]
.getConfigurationElements();
for (int j = 0; j < elements.length; j++) {
if (elements[j].getName().equals(TAG_INTROBRANDINGBINDING)) {
String introId = elements[j].getAttribute(ATT_INTROID);
String brandingId = elements[j].getAttribute(ATT_BRANDINGID);
if (introId == null || brandingId == null) {
IStatus status = new Status(
IStatus.ERROR,
elements[j].getDeclaringExtension()
.getNamespace(),
IStatus.ERROR,
"introId and brandingId must be defined.", new IllegalArgumentException()); //$NON-NLS-1$
WorkbenchPlugin.log("Invalid intro binding", status); //$NON-NLS-1$
continue;
}
if (targetBrandingId.equals(brandingId)) {
return introId;
}
}
}
}
return null;
}
// ENDRAP
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntro(java.lang.String)
*/
public IIntroDescriptor getIntro(String id) {
IIntroDescriptor[] intros = getIntros();
for (int i = 0; i < intros.length; i++) {
IIntroDescriptor desc = intros[i];
if (desc.getId().equals(id)) {
return desc;
}
}
return null;
}
}